home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Frameworks / TransSkel 3.18 / Interface / TransSkel.h next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  13.1 KB  |  371 lines  |  [TEXT/KAHL]

  1. /*
  2.  * prototypes for TransSkel public routines
  3.  *
  4.  * Compiles under THINK C 6 or 7 or Metrowerks C 4.5
  5.  *
  6.  * Assumes that compiler understands nested prototypes.
  7.  *
  8.  * THINK C Notes:
  9.  * You must have THINK C Language Extensions turned on in the
  10.  * Edit/Options.../Language Settings dialog (so that the "pascal" keyword
  11.  * is recognized, for one thing).
  12.  *
  13.  * for:            TransSkel 3.18
  14.  * last edit:    16 Nov 94
  15.  */
  16.  
  17. # ifndef    __TRANSSKEL_H__
  18.  
  19. # define    __TRANSSKEL_H__
  20.  
  21. # define    skelMajorRelease    3
  22. # define    skelMinorRelease    18
  23.  
  24. /*
  25.  * Define symbol as shorthand indicating whether PPC code is being
  26.  * generated.
  27.  */
  28.  
  29. # ifndef skelPPC
  30. # if defined(powerc) || defined(__powerc)
  31. # define    skelPPC    1
  32. # else
  33. # define    skelPPC    0
  34. # endif
  35. # endif
  36.  
  37. /*
  38.  * Define skelUnivHeaders symbol indicating whether or not the universal
  39.  * headers are being used.  If they are, then UniversalProcPtr's and
  40.  * related machinery can be used.  If not, then it's necessary to define
  41.  * compatibility macros for UPP's.
  42.  *
  43.  * If skelUnivHeaders isn't already defined, this fragment tries to define it
  44.  * based on whether or not the USESROUTINEDESCRIPTORS is defined, since
  45.  * that symbol didn't come into existence until the universal headers were
  46.  * invented.  This can be overridden by making sure skelUnivHeaders is either
  47.  * 1 or 0 before TransSkel.h is processed.
  48.  */
  49.  
  50. # ifndef    skelUnivHeaders
  51. # ifdef USESROUTINEDESCRIPTORS
  52. # define    skelUnivHeaders    1
  53. # else
  54. # define    skelUnivHeaders    0
  55. # endif /* USESROUTINEDESCRIPTORS */
  56. # endif /* skelUnivHeaders */
  57.  
  58.  
  59. /*
  60.  * Compatibility machinery for non-universal header compilation
  61.  *
  62.  * If skelUnivHeaders is 0, then the universal headers aren't available
  63.  * and UPP types won't exist.  Instead the UPP types are typedef'd below
  64.  * to the equivalent non-universal header types.  The types listed here
  65.  * are those needed to UPP-ize parameters or return values of TransSkel
  66.  * interface functions or structure members.
  67.  */
  68.  
  69. # if !skelUnivHeaders
  70.  
  71. typedef    ProcPtr                    UniversalProcPtr;
  72. typedef    GrowZoneProcPtr            GrowZoneUPP;
  73. typedef    ModalFilterProcPtr        ModalFilterUPP;
  74. typedef    ModalFilterYDProcPtr    ModalFilterYDUPP;
  75. typedef    pascal void (*UserItemUPP) (DialogPtr d, short item);
  76.  
  77. # define    NewModalFilterProc(proc)    (ModalFilterUPP)(proc)
  78. # define    NewModalFilterYDProc(proc)    (ModalFilterYDUPP)(proc)
  79.  
  80. # define    DisposeRoutineDescriptor(upp)    /* as nothing */
  81.  
  82. # endif /* !skelUnivHeaders */
  83.  
  84.  
  85. /*
  86.  * Macro for accessing QuickDraw globals (e.g., white, arrow).  Some
  87.  * compilers can access these as white or &qd.white.  Others allow only
  88.  * &qd.white (e.g., Metrowerks), others allow only white (e.g., THINK
  89.  * Pascal).  The default is to use the qd struct.  If you need the non-qd
  90.  * form, you can supply an override definition of:
  91.  *     #define SkelQD(global) global
  92.  * (This is how the THINK Pascal version of the library is created.)
  93.  */
  94.  
  95. # ifndef    SkelQD
  96. # define    SkelQD(global)    (qd.global)
  97. # endif
  98.  
  99.  
  100. /* window property numbers */
  101.  
  102. # define    skelWPropAll            0        /* pseudo-property */
  103. # define    skelWPropModeless        1        /* modeless dialog */
  104. # define    skelWPropModal            2        /* modal dialog */
  105. # define    skelWPropTool            3        /* tool window */
  106. # define    skelWPropMovableModal    4        /* movable modal dialog */
  107. # define    skelWPropHelp            5        /* help window */
  108. # define    skelWPropText            6        /* text window */
  109. # define    skelWPropDisplayWind    7        /* TransDisplay window */
  110. # define    skelWPropEditWind        8        /* TransEdit window */
  111. # define    skelWPropApplBase        256        /* general-use prop num base */
  112.  
  113.  
  114. /* SkelQuery() query selectors */
  115.  
  116. # define    skelQVersion        1            /* TransSkel version */
  117. # define    skelQSysVersion        2            /* System software version */
  118. # define    skelQHasWNE            3            /* whether has WaitNextEvent() */
  119. # define    skelQMBarHeight        4            /* menu bar height */
  120. # define    skelQHas64KROM        5            /* whether has 64K ROM */
  121. # define    skelQHasColorQD        6            /* whether has Color QuickDraw */
  122. # define    skelQInForeground    7            /* whether in foreground */
  123. # define    skelQHasGestalt        8            /* whether has Gestalt() */
  124. # define    skelQHasAppleEvents    9            /* whether has Apple Events */
  125. # define    skelQQDVersion        10            /* QuickDraw version */
  126. # define    skelQGrayRgn        11            /* Desktop region */
  127.  
  128.  
  129. /* window property types */
  130.  
  131. typedef struct SkelWindProperty    SkelWindProperty, **SkelWindPropHandle;
  132.  
  133. struct SkelWindProperty
  134. {
  135.     short                skelWPropType;
  136.     long                skelWPropData;
  137.     SkelWindPropHandle    skelWPropNext;
  138. };
  139.  
  140.  
  141. /*
  142.  * Initialization parameters
  143.  *
  144.  * SkelResumeProcPtr is the same as ResumeProcPtr, but the latter is
  145.  * disappearing from Apple's header files because it's not supposed
  146.  * to be used under System 7 anymore.
  147.  */
  148.  
  149. typedef struct SkelInitParams SkelInitParams, *SkelInitParamsPtr;
  150. typedef pascal void (*SkelResumeProcPtr)(void);
  151.  
  152. struct SkelInitParams
  153. {
  154.     short                skelMoreMasters;
  155.     GrowZoneUPP            skelGzProc;
  156.     SkelResumeProcPtr    skelResumeProc;
  157.     Size                skelStackAdjust;
  158. };
  159.  
  160.  
  161. /*
  162.  * typedefs for pointers to various sorts of functions used by TransSkel
  163.  * routines.
  164.  */
  165.  
  166. typedef pascal void (*SkelIdleProcPtr) (void);
  167. typedef    pascal Boolean (*SkelEventHookProcPtr) (EventRecord *);
  168. typedef pascal void (*SkelSuspendResumeProcPtr) (Boolean inForeground);
  169. typedef pascal void (*SkelClipCvtProcPtr) (Boolean inForeground);
  170. typedef pascal void (*SkelAEHandlerProcPtr) (EventRecord *);
  171.  
  172.  
  173. /* ------------- */
  174. /* Core routines */
  175. /* ------------- */
  176.  
  177. /* initialization/termination routines */
  178.  
  179. pascal void SkelGetInitParams (SkelInitParamsPtr initParams);
  180. pascal void SkelInit (SkelInitParamsPtr initParams);
  181. pascal void SkelCleanup (void);
  182.  
  183. /* event-loop-related routines */
  184.  
  185. pascal void SkelEventLoop (void);
  186. pascal void SkelStopEventLoop (void);
  187. pascal void SkelRouteEvent (EventRecord *evt);
  188. pascal void SkelActivate (WindowPtr w, Boolean active);
  189. pascal void SkelClose (WindowPtr w);
  190. pascal EventRecord *SkelGetCurrentEvent (void);
  191. pascal short SkelGetModifiers (void);
  192. pascal void SkelSetEventMask (short mask);
  193. pascal short SkelGetEventMask (void);
  194. pascal void SkelSetDlogMask (short mask);
  195. pascal short SkelGetDlogMask (void);
  196. pascal void SkelSetIdle (SkelIdleProcPtr p);
  197. pascal SkelIdleProcPtr SkelGetIdle (void);
  198. pascal void SkelSetEventHook (SkelEventHookProcPtr p);
  199. pascal SkelEventHookProcPtr SkelGetEventHook (void);
  200. pascal void SkelSetSuspendResume (SkelSuspendResumeProcPtr p);
  201. pascal SkelSuspendResumeProcPtr SkelGetSuspendResume (void);
  202. pascal void SkelSetClipCvt (SkelClipCvtProcPtr p);
  203. pascal SkelClipCvtProcPtr SkelGetClipCvt (void);
  204. pascal void SkelSetWaitTimes (long fgTime, long bgTime);
  205. pascal void SkelGetWaitTimes (long *pFgTime, long *pBgTime);
  206.  
  207. pascal void SkelSetAEHandler (SkelAEHandlerProcPtr p);
  208. pascal SkelAEHandlerProcPtr SkelGetAEHandler (void);
  209.  
  210.  
  211. /* window handling routines */
  212.  
  213. typedef    pascal void (*SkelWindMouseProcPtr) (Point where, long when, short modifiers);
  214. /*
  215.  * Key handler needs special treatment because for prototyped functions
  216.  * (which TransSkel uses), THINK C passes character arguments in the *high*
  217.  * byte of a two-byte stack value.  To make sure the values are passed in the
  218.  * low byte from either C or Pascal key handlers, the first two arguments are
  219.  * passed in shorts.  In Pascal, the key procedure should
  220.  * look like this:
  221.  *     procedure Key (c: char; code: Integer; modifiers: Integer);
  222.  */
  223. typedef    pascal void (*SkelWindKeyProcPtr) (short c, short code, short modifiers);
  224. typedef    pascal void (*SkelWindUpdateProcPtr) (Boolean resized);
  225. typedef    pascal void (*SkelWindActivateProcPtr) (Boolean active);
  226. typedef    pascal void (*SkelWindCloseProcPtr) (void);
  227. typedef    pascal void (*SkelWindClobberProcPtr) (void);
  228. typedef    pascal void (*SkelWindIdleProcPtr) (void);
  229.  
  230. typedef    pascal void (*SkelWindSelectProcPtr) (DialogPtr dlog, short item);
  231.  
  232. typedef    pascal void (*SkelWindZoomProcPtr) (WindowPtr w, short zoomDir);
  233.  
  234. pascal Boolean SkelWindow (WindowPtr w,
  235.                     SkelWindMouseProcPtr doMouse,
  236.                     SkelWindKeyProcPtr doKey,
  237.                     SkelWindUpdateProcPtr doUpdate,
  238.                     SkelWindActivateProcPtr doActivate,
  239.                     SkelWindCloseProcPtr doClose,
  240.                     SkelWindClobberProcPtr doClobber,
  241.                     SkelWindIdleProcPtr doIdle,
  242.                     Boolean idleFrontOnly);
  243. pascal Boolean SkelDialog (DialogPtr dlog,
  244.                     ModalFilterProcPtr doFilter,
  245.                     SkelWindSelectProcPtr doSelect,
  246.                     SkelWindCloseProcPtr doClose,
  247.                     SkelWindClobberProcPtr doClobber);
  248. pascal void SkelRmveWind (WindowPtr w);
  249. pascal void SkelRmveDlog (DialogPtr dlog);
  250. pascal Boolean SkelWindowRegistered (WindowPtr w);
  251. pascal Boolean SkelIsDlog (WindowPtr w);
  252. pascal Boolean SkelIsMMDlog (WindowPtr w);
  253. pascal void SkelSetGrowBounds (WindowPtr w,
  254.                             short hLo, short vLo,
  255.                             short hHi, short vHi);
  256. pascal void SkelSetZoom (WindowPtr w, SkelWindZoomProcPtr pZoom);
  257. pascal SkelWindZoomProcPtr SkelGetZoom (WindowPtr w);
  258. pascal Boolean SkelGetRectDevice (Rect *rp, GDHandle *gd, Rect *devRect, Boolean *isMain);
  259. pascal Boolean SkelGetWindowDevice (WindowPtr w, GDHandle *gd, Rect *devRect);
  260. pascal void SkelGetWindContentRect (WindowPtr w, Rect *rp);
  261. pascal void SkelGetWindStructureRect (WindowPtr w, Rect *rp);
  262. pascal short SkelGetWindTitleHeight (WindowPtr w);
  263.  
  264. pascal Boolean SkelAddWindProp (WindowPtr w, short propType, long propData);
  265. pascal void SkelRmveWindProp (WindowPtr w, short propType);
  266. pascal SkelWindPropHandle SkelGetWindProp (WindowPtr w, short propType);
  267. pascal long SkelGetWindPropData (WindowPtr w, short propType);
  268.  
  269.  
  270. /* menu handling routines */
  271.  
  272. typedef    pascal void (*SkelMenuSelectProcPtr) (short item);
  273. typedef    pascal void (*SkelMenuClobberProcPtr) (MenuHandle m);
  274. typedef pascal void (*SkelMenuHookProcPtr) (void);
  275.  
  276. pascal Boolean SkelMenu (MenuHandle m,
  277.                     SkelMenuSelectProcPtr doSelect,
  278.                     SkelMenuClobberProcPtr doClobber,
  279.                     Boolean subMenu,
  280.                     Boolean drawBar);
  281. pascal void SkelRmveMenu (MenuHandle m);
  282.  
  283. pascal void SkelSetMenuHook (SkelMenuHookProcPtr p);
  284. pascal SkelMenuHookProcPtr SkelGetMenuHook (void);
  285.  
  286.  
  287. /* environment information routines */
  288.  
  289. pascal long SkelQuery (short selector);
  290. pascal Boolean SkelTrapAvailable (short theTrap);
  291.  
  292.  
  293. /* ------------------ */
  294. /* Auxiliary routines */
  295. /* ------------------ */
  296.  
  297. # define    skelAppleMenuID        128
  298.  
  299. pascal void SkelApple (StringPtr items, SkelMenuSelectProcPtr pSelect);
  300.  
  301. pascal void SkelDoEvents (short mask);
  302. pascal void SkelDoUpdates (void);
  303.  
  304. pascal ModalFilterUPP SkelDlogFilter (ModalFilterUPP filter, Boolean doReturn);
  305. pascal ModalFilterYDUPP SkelDlogFilterYD (ModalFilterYDUPP filter, Boolean doReturn);
  306. pascal void SkelRmveDlogFilter (void);
  307. pascal void SkelDlogDefaultItem (short item);
  308. pascal void SkelDlogCancelItem (short item);
  309. pascal void SkelDlogTracksCursor (Boolean track);
  310.  
  311. pascal Boolean SkelCmdPeriod (EventRecord *evt);
  312.  
  313.  
  314. /* -------------------- */
  315. /* Convenience routines */
  316. /* -------------------- */
  317.  
  318. /* positioning types for SkelGetReferenceRect()/SkelPositionWindow() */
  319.  
  320. # define    skelPositionNone            0    /* leave as is */
  321. # define    skelPositionOnMainDevice    1    /* position on main device */
  322. # define    skelPositionOnParentWindow    2    /* position on FrontWindow() */
  323. # define    skelPositionOnParentDevice    3    /* position on FrontWindow()'s device */
  324.  
  325. pascal void SkelGetMainDeviceRect (Rect *r);
  326. pascal void SkelPositionRect (Rect *refRect, Rect *r, Fixed hRatio, Fixed vRatio);
  327. pascal void SkelGetReferenceRect (Rect *r, short positionType);
  328. pascal void SkelPositionWindow (WindowPtr w, short positionType, Fixed hRatio, Fixed vRatio);
  329. pascal Boolean SkelTestRectVisible (Rect *r);
  330.  
  331. /* alert presentation routines */
  332.  
  333. pascal short SkelAlert (short alrtResNum, ModalFilterUPP filter, short positionType);
  334. pascal void SkelSetAlertPosRatios (Fixed hRatio, Fixed vRatio);
  335. pascal void SkelGetAlertPosRatios (Fixed *hRatio, Fixed *vRatio);
  336.  
  337. /* control manipulation routines */
  338.  
  339. pascal Boolean SkelHiliteControl (ControlHandle ctrl, short hilite);
  340. pascal void SkelDrawButtonOutline (ControlHandle ctrl);
  341. pascal void SkelEraseButtonOutline (ControlHandle ctrl);
  342. pascal void SkelFlashButton (ControlHandle ctrl);
  343. pascal short SkelToggleCtlValue (ControlHandle ctrl);
  344.  
  345. /* dialog item manipulation routines */
  346.  
  347. pascal ControlHandle SkelGetDlogCtl (DialogPtr d, short item);
  348. pascal Boolean SkelSetDlogCtlHilite (DialogPtr d, short item, short hilite);
  349. pascal short SkelGetDlogCtlHilite (DialogPtr d, short item);
  350. pascal void SkelSetDlogCtlValue (DialogPtr d, short item, short value);
  351. pascal short SkelGetDlogCtlValue (DialogPtr d, short item);
  352. pascal short SkelToggleDlogCtlValue (DialogPtr d, short item);
  353. pascal void SkelSetDlogCtlRefCon (DialogPtr d, short item, long value);
  354. pascal long SkelGetDlogCtlRefCon (DialogPtr d, short item);
  355. pascal void SkelSetDlogStr (DialogPtr d, short item, StringPtr str);
  356. pascal void SkelGetDlogStr (DialogPtr d, short item, StringPtr str);
  357. pascal void SkelSetDlogRect (DialogPtr d, short item, Rect *r);
  358. pascal void SkelGetDlogRect (DialogPtr d, short item, Rect *r);
  359. pascal void SkelSetDlogProc (DialogPtr d, short item, UserItemUPP proc);
  360. pascal UserItemUPP SkelGetDlogProc (DialogPtr d, short item);
  361. pascal void SkelSetDlogType (DialogPtr d, short item, short type);
  362. pascal short SkelGetDlogType (DialogPtr d, short item);
  363. pascal void SkelSetDlogRadioButtonSet (DialogPtr dlog, short first, short last, short choice);
  364. pascal void SkelSetDlogButtonOutliner (DialogPtr d, short item);
  365. pascal void SkelSetDlogCursor (DialogPtr d);
  366. pascal Boolean SkelDlogMapKeyToButton (DialogPtr d, EventRecord *evt, short *item,
  367.                                         short defaultItem, short cancelItem);
  368.  
  369. pascal void SkelPause (long ticks);
  370.  
  371. # endif /* __TRANSSKEL_H__ */